home *** CD-ROM | disk | FTP | other *** search
/ Experimental BBS Explossion 3 / Experimental BBS Explossion III.iso / c / tde31.zip / CFGMODES.C < prev    next >
C/C++ Source or Header  |  1993-08-29  |  14KB  |  584 lines

  1. /*
  2.  * Author:        Frank Davis
  3.  * Date:          January 20, 1992
  4.  * Compiler:      MSC 6.0a and QuickC 2.5
  5.  *
  6.  * This program is released into the public domain.  You may distribute
  7.  * it freely, Frank Davis
  8.  */
  9.  
  10.  
  11. #include <bios.h>
  12. #include <dos.h>
  13. #include <stdlib.h>
  14. #include <stdio.h>
  15. #include <string.h>
  16.  
  17. #include "tdecfg.h"
  18. #include "cfgmodes.h"
  19.  
  20.  
  21. extern struct vcfg cfg;         /* video stuff */
  22. extern FILE *tde_exe;           /* FILE pointer to tde.exe */
  23. extern long mode_offset;
  24.  
  25. MODE_INFO in_modes;           /* play around with modes in this struct */
  26.  
  27. int color;
  28.  
  29. /*
  30.  * Name:    tdemodes
  31.  * Date:    July 21, 1991
  32.  * Notes:   Strategy is fairly straight forward -  1) initialize all the
  33.  *          variables  2) show the user a color sample  3) make the changes
  34.  *          permanent if desired.
  35.  */
  36. void tdemodes( void )
  37. {
  38.    color = 7;
  39.    initialize_modes( );
  40.    show_init_mode( );
  41.    change_modes( );
  42. }
  43.  
  44.  
  45. /*
  46.  * Name:    initialize_modes
  47.  * Date:    July 21, 1991
  48.  * Notes:   Set up the global mode variables.
  49.  */
  50. void initialize_modes( void )
  51. {
  52. int i, j;
  53.  
  54.    fseek( tde_exe, mode_offset, SEEK_SET );
  55.    fread( (void *)&in_modes, sizeof( MODE_INFO ), 1, tde_exe );
  56.  
  57.    mode[Ins].mode      = in_modes.insert;
  58.    mode[Ind].mode      = in_modes.indent;
  59.    mode[PTAB].mode     = in_modes.ptab_size;
  60.    mode[LTAB].mode     = in_modes.ltab_size;
  61.    mode[Smart].mode    = in_modes.smart_tab;
  62.    mode[Write_Z].mode  = in_modes.control_z;
  63.    mode[Crlf].mode     = in_modes.crlf;
  64.    mode[Trim].mode     = in_modes.trailing;
  65.    mode[Eol].mode      = in_modes.show_eol;
  66.    mode[WW].mode       = in_modes.word_wrap;
  67.    mode[Left].mode     = in_modes.left_margin;
  68.    mode[Para].mode     = in_modes.parg_margin;
  69.    mode[Right].mode    = in_modes.right_margin;
  70.    mode[Size].mode     = in_modes.cursor_size;
  71.    mode[Backup].mode   = in_modes.do_backups;
  72.    mode[Ruler].mode    = in_modes.ruler;
  73.    mode[Date].mode     = in_modes.date_style;
  74.    mode[Time].mode     = in_modes.time_style;
  75.    mode[Initcase].mode = in_modes.search_case;
  76. }
  77.  
  78.  
  79. /*
  80.  * Name:    show_init_mode
  81.  * Date:    July 21, 1991
  82.  * Notes:   Draw the sample screen.
  83.  */
  84. void show_init_mode( void )
  85. {
  86. char *sample;
  87. int line, i;
  88.  
  89.    cls( );
  90.    xygoto( -1, -1 );
  91.    sample = mode_screen[0];
  92.    for (i=0,line=1; sample != NULL; line++, i++) {
  93.       sample = mode_screen[i];
  94.       s_output( (char far *)sample, line, 0, 7 );
  95.    }
  96.    for (i=0; i<19; i++)
  97.       (*mode[i].show_me)();
  98. }
  99.  
  100.  
  101. /*
  102.  * Name:    show_insert_mode
  103.  * Date:    January 20, 1992
  104.  */
  105. void show_insert_mode( void )
  106. {
  107. char *p[] = {
  108.    "Overwrite",
  109.    "Insert   "
  110. };
  111.  
  112.    s_output( p[mode[Ins].mode], mode[Ins].line, mode[Ins].col, color );
  113. }
  114.  
  115.  
  116. /*
  117.  * Name:    show_indent_mode
  118.  * Date:    January 20, 1992
  119.  */
  120. void show_indent_mode( void )
  121. {
  122. char *p[] = {
  123.    "Indent off",
  124.    "Indent on "
  125. };
  126.  
  127.    s_output( p[mode[Ind].mode], mode[Ind].line, mode[Ind].col, color );
  128. }
  129.  
  130.  
  131. /*
  132.  * Name:    show_ptabsize
  133.  * Date:    January 20, 1992
  134.  */
  135. void show_ptabsize( void )
  136. {
  137. char temp[10];
  138.  
  139.    s_output( "   ", mode[PTAB].line, mode[PTAB].col, color );
  140.    s_output( itoa(mode[PTAB].mode,temp,10), mode[PTAB].line, mode[PTAB].col,color);
  141. }
  142.  
  143.  
  144. /*
  145.  * Name:    show_ltabsize
  146.  * Date:    January 20, 1992
  147.  */
  148. void show_ltabsize( void )
  149. {
  150. char temp[10];
  151.  
  152.    s_output( "   ", mode[LTAB].line, mode[LTAB].col, color );
  153.    s_output( itoa(mode[LTAB].mode,temp,10), mode[LTAB].line, mode[LTAB].col,color);
  154. }
  155.  
  156.  
  157. /*
  158.  * Name:    show_controlz
  159.  * Date:    January 20, 1992
  160.  */
  161. void show_controlz( void )
  162. {
  163. char *p[] = {
  164.    "No ^Z   ",
  165.    "Write ^Z",
  166. };
  167.  
  168.    s_output( p[mode[Write_Z].mode], mode[Write_Z].line,mode[Write_Z].col,color);
  169. }
  170.  
  171.  
  172. /*
  173.  * Name:    show_eol_out
  174.  * Date:    January 20, 1992
  175.  */
  176. void show_eol_out( void )
  177. {
  178. char *p[] = {
  179.    "",
  180.    "CRLF",
  181.    "LF  ",
  182. };
  183.  
  184.    s_output( p[mode[Crlf].mode], mode[Crlf].line, mode[Crlf].col, color );
  185. }
  186.  
  187.  
  188. /*
  189.  * Name:    show_trail
  190.  * Date:    January 20, 1992
  191.  */
  192. void show_trail( void )
  193. {
  194. char *p[] = {
  195.    "No Trim",
  196.    "Trim   ",
  197. };
  198.  
  199.    s_output( p[mode[Trim].mode], mode[Trim].line, mode[Trim].col, color );
  200. }
  201.  
  202.  
  203. /*
  204.  * Name:    show_eol_display
  205.  * Date:    January 20, 1992
  206.  */
  207. void show_eol_display( void )
  208. {
  209. char *p[] = {
  210.    "Off",
  211.    "On ",
  212. };
  213.  
  214.    s_output( p[mode[Eol].mode], mode[Eol].line, mode[Eol].col, color );
  215. }
  216.  
  217.  
  218. /*
  219.  * Name:    show_smart_mode
  220.  * Date:    January 20, 1992
  221.  */
  222. void show_smart_mode( void )
  223. {
  224. char *p[] = {
  225.    "Off",
  226.    "On ",
  227. };
  228.  
  229.    s_output( p[mode[Smart].mode], mode[Smart].line, mode[Smart].col, color );
  230. }
  231.  
  232.  
  233. /*
  234.  * Name:    show_ww
  235.  * Date:    January 20, 1992
  236.  */
  237. void show_ww( void )
  238. {
  239. char *p[] = {
  240.    "Off                ",
  241.    "Fixed margins      ",
  242.    "Dynamic left margin",
  243. };
  244.  
  245.    s_output( p[mode[WW].mode], mode[WW].line, mode[WW].col, color );
  246. }
  247.  
  248.  
  249. /*
  250.  * Name:    show_initcase
  251.  * Date:    January 20, 1992
  252.  */
  253. void show_initcase( void )
  254. {
  255. char *p[] = {
  256.    "      ",
  257.    "IGNORE",
  258.    "MATCH ",
  259. };
  260.  
  261.    s_output( p[mode[Initcase].mode], mode[Initcase].line, mode[Initcase].col,
  262.               color );
  263. }
  264.  
  265.  
  266. /*
  267.  * Name:    show_left
  268.  * Date:    January 20, 1992
  269.  */
  270. void show_left( void )
  271. {
  272. char temp[10];
  273.  
  274.    s_output( "   ", mode[Left].line, mode[Left].col, color );
  275.    s_output( itoa( mode[Left].mode+1, temp, 10 ), mode[Left].line, mode[Left].col,
  276.              color);
  277. }
  278.  
  279.  
  280. /*
  281.  * Name:    show_para
  282.  * Date:    January 20, 1992
  283.  */
  284. void show_para( void )
  285. {
  286. char temp[10];
  287.  
  288.    s_output( "   ", mode[Para].line, mode[Para].col, color );
  289.    s_output( itoa( mode[Para].mode+1, temp, 10 ), mode[Para].line, mode[Para].col,
  290.              color);
  291. }
  292.  
  293.  
  294. /*
  295.  * Name:    show_right
  296.  * Date:    January 20, 1992
  297.  */
  298. void show_right( void )
  299. {
  300. char temp[10];
  301.  
  302.    s_output( "   ", mode[Right].line, mode[Right].col, color );
  303.    s_output( itoa(mode[Right].mode+1,temp,10), mode[Right].line, mode[Right].col,
  304.              color);
  305. }
  306.  
  307.  
  308. /*
  309.  * Name:    show_cursor_size
  310.  * Date:    January 20, 1992
  311.  */
  312. void show_cursor_size( void )
  313. {
  314. char *p[] = {
  315.    "Small Insert Cursor",
  316.    "Big Insert Cursor  ",
  317. };
  318.  
  319.    s_output( p[mode[Size].mode], mode[Size].line, mode[Size].col, color );
  320. }
  321.  
  322.  
  323. /*
  324.  * Name:    show_backup_mode
  325.  * Date:    January 20, 1992
  326.  */
  327. void show_backup_mode( void )
  328. {
  329. char *p[] = {
  330.    "No .bak files    ",
  331.    "Create .bak files"
  332. };
  333.  
  334.    s_output( p[mode[Backup].mode], mode[Backup].line, mode[Backup].col, color );
  335. }
  336.  
  337.  
  338. /*
  339.  * Name:    show_backup_mode
  340.  * Date:    January 20, 1992
  341.  */
  342. void show_ruler_mode( void )
  343. {
  344. char *p[] = {
  345.    "No ruler  ",
  346.    "Show ruler"
  347. };
  348.  
  349.    s_output( p[mode[Ruler].mode], mode[Ruler].line, mode[Ruler].col, color );
  350. }
  351.  
  352.  
  353. /*
  354.  * Name:    show_date_style
  355.  * Date:    June 5, 1992
  356.  */
  357. void show_date_style( void )
  358. {
  359. char *p[] = {
  360.    "MM_DD_YY  ",
  361.    "DD_MM_YY  ",
  362.    "YY_MM_DD  ",
  363.    "MM_DD_YYYY",
  364.    "DD_MM_YYYY",
  365.    "YYYY_MM_DD",
  366. };
  367.  
  368.    s_output( p[mode[Date].mode], mode[Date].line, mode[Date].col, color );
  369. }
  370.  
  371.  
  372. /*
  373.  * Name:    show_time_style
  374.  * Date:    June 5, 1992
  375.  */
  376. void show_time_style( void )
  377. {
  378. char *p[] = {
  379.    "12_HOUR",
  380.    "24_HOUR"
  381. };
  382.  
  383.    s_output( p[mode[Time].mode], mode[Time].line, mode[Time].col, color );
  384. }
  385.  
  386.  
  387. /*
  388.  * Name:    change_modes
  389.  * Date:    July 21, 1991
  390.  * Notes:   Real workhorse function of the utility.  Get a key and then
  391.  *          figure out what to do with it.
  392.  */
  393. void change_modes( void )
  394. {
  395. int c;
  396. int m;
  397. int new_field;
  398.  
  399.    m = 0;
  400.    xygoto( mode[m].col, mode[m].line );
  401.    color = 112;
  402.    (*mode[m].show_me)();
  403.    for (c=0; c != F3  &&  c != F10  &&  c != ESC;) {
  404.       c = getkey( );
  405.       new_field = FALSE;
  406.       color = 112;
  407.       switch (c) {
  408.          case RTURN :
  409.          case DOWN  :
  410.             color = 7;
  411.             (*mode[m].show_me)();
  412.             ++m;
  413.             if (m > 18)
  414.                m = 0;
  415.             new_field = TRUE;
  416.             break;
  417.          case UP    :
  418.             color = 7;
  419.             (*mode[m].show_me)();
  420.             --m;
  421.             if (m < 0)
  422.                m = 18;
  423.             new_field = TRUE;
  424.             break;
  425.          case LEFT  :
  426.             switch (m) {
  427.                case Ins     :
  428.                case Ind     :
  429.                case Write_Z :
  430.                case Smart   :
  431.                case Trim    :
  432.                case Eol     :
  433.                case Size    :
  434.                case Backup  :
  435.                case Ruler   :
  436.                case Time    :
  437.                   mode[m].mode = !mode[m].mode;
  438.                   break;
  439.                case PTAB    :
  440.                case LTAB    :
  441.                   if (mode[m].mode > 1)
  442.                      --mode[m].mode;
  443.                   else
  444.                      mode[m].mode = 1040 / 2;
  445.                   break;
  446.                case WW      :
  447.                   --mode[m].mode;
  448.                   if (mode[m].mode < 0)
  449.                      mode[m].mode = 2;
  450.                   break;
  451.                case Date    :
  452.                   --mode[m].mode;
  453.                   if (mode[m].mode < 0)
  454.                      mode[m].mode = 5;
  455.                   break;
  456.                case Crlf    :
  457.                   if (mode[m].mode == CRLF)
  458.                      mode[m].mode = LF;
  459.                   else
  460.                      mode[m].mode = CRLF;
  461.                   break;
  462.                case Left    :
  463.                case Para    :
  464.                   if (mode[m].mode > 0)
  465.                      --mode[m].mode;
  466.                   else
  467.                      mode[m].mode = mode[Right].mode - 1;
  468.                   break;
  469.                case Right   :
  470.                   if (mode[m].mode > mode[Left].mode + 1 &&
  471.                       mode[m].mode > mode[Para].mode + 1)
  472.                      --mode[m].mode;
  473.                   else
  474.                      mode[m].mode = 1040;
  475.                   break;
  476.                case Initcase   :
  477.                   if (mode[m].mode == 1)
  478.                      mode[m].mode = 2;
  479.                   else
  480.                      mode[m].mode = 1;
  481.                   break;
  482.             }
  483.             (*mode[m].show_me)();
  484.             break;
  485.          case RIGHT :
  486.             switch (m) {
  487.                case Ins     :
  488.                case Ind     :
  489.                case Write_Z :
  490.                case Smart   :
  491.                case Trim    :
  492.                case Eol     :
  493.                case Size    :
  494.                case Backup  :
  495.                case Ruler   :
  496.                case Time    :
  497.                   mode[m].mode = !mode[m].mode;
  498.                   break;
  499.                case PTAB     :
  500.                case LTAB     :
  501.                   if (mode[m].mode < 1040 / 2)
  502.                     ++mode[m].mode;
  503.                   else
  504.                      mode[m].mode = 1;
  505.                   break;
  506.                case WW      :
  507.                   ++mode[m].mode;
  508.                   if (mode[m].mode > 2)
  509.                      mode[m].mode = 0;
  510.                   break;
  511.                case Date    :
  512.                   ++mode[m].mode;
  513.                   if (mode[m].mode > 5)
  514.                      mode[m].mode = 0;
  515.                   break;
  516.                case Crlf    :
  517.                   if (mode[m].mode == CRLF)
  518.                      mode[m].mode = LF;
  519.                   else
  520.                      mode[m].mode = CRLF;
  521.                   break;
  522.                case Left    :
  523.                case Para    :
  524.                   if (mode[m].mode < mode[Right].mode)
  525.                      ++mode[m].mode;
  526.                   else
  527.                      mode[m].mode = 0;
  528.                   break;
  529.                case Right   :
  530.                   if (mode[m].mode < 1038)
  531.                      ++mode[m].mode;
  532.                   else {
  533.                      if (mode[Left].mode < mode[Para].mode)
  534.                         mode[m].mode = mode[Para].mode + 1;
  535.                      else
  536.                         mode[m].mode = mode[Left].mode + 1;
  537.                   }
  538.                   break;
  539.                case Initcase   :
  540.                   if (mode[m].mode == 1)
  541.                      mode[m].mode = 2;
  542.                   else
  543.                      mode[m].mode = 1;
  544.                   break;
  545.             }
  546.             (*mode[m].show_me)();
  547.             break;
  548.       }
  549.       if (new_field) {
  550.          color = 112;
  551.          (*mode[m].show_me)();
  552.          xygoto( mode[m].col, mode[m].line );
  553.       }
  554.    }
  555.  
  556.    /*
  557.     * write changes to "tde.exe" if user presses F10.
  558.     */
  559.    if (c == F10) {
  560.       in_modes.insert        = mode[Ins].mode;
  561.       in_modes.indent        = mode[Ind].mode;
  562.       in_modes.ptab_size     = mode[PTAB].mode;
  563.       in_modes.ltab_size     = mode[LTAB].mode;
  564.       in_modes.smart_tab     = mode[Smart].mode;
  565.       in_modes.control_z     = mode[Write_Z].mode;
  566.       in_modes.crlf          = mode[Crlf].mode;
  567.       in_modes.trailing      = mode[Trim].mode;
  568.       in_modes.show_eol      = mode[Eol].mode;
  569.       in_modes.word_wrap     = mode[WW].mode;
  570.       in_modes.left_margin   = mode[Left].mode;
  571.       in_modes.parg_margin   = mode[Para].mode;
  572.       in_modes.right_margin  = mode[Right].mode;
  573.       in_modes.cursor_size   = mode[Size].mode;
  574.       in_modes.do_backups    = mode[Backup].mode;
  575.       in_modes.ruler         = mode[Ruler].mode;
  576.       in_modes.date_style    = mode[Date].mode;
  577.       in_modes.time_style    = mode[Time].mode;
  578.       in_modes.search_case   = mode[Initcase].mode;
  579.       fseek( tde_exe, mode_offset, SEEK_SET );
  580.       fwrite( (void *)&in_modes, sizeof( MODE_INFO ), 1, tde_exe );
  581.    }
  582.    cls( );
  583. }
  584.